home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / gnu / gnulib / dkbtrace / pbmplus / source / pgm / rawtopgm.c < prev   
Encoding:
C/C++ Source or Header  |  1991-12-10  |  2.5 KB  |  107 lines

  1. /* rawtopgm.c - convert raw grayscale bytes into a portable graymap
  2. **
  3. ** Copyright (C) 1989 by Jef Poskanzer.
  4. **
  5. ** Permission to use, copy, modify, and distribute this software and its
  6. ** documentation for any purpose and without fee is hereby granted, provided
  7. ** that the above copyright notice appear in all copies and that both that
  8. ** copyright notice and this permission notice appear in supporting
  9. ** documentation.  This software is provided "as is" without express or
  10. ** implied warranty.
  11. */
  12.  
  13. #include "pgm.h"
  14.  
  15. void
  16. main( argc, argv )
  17.     int argc;
  18.     char* argv[];
  19.     {
  20.     FILE* ifp;
  21.     gray* grayrow;
  22.     register gray* gP;
  23.     int argn, headerskip, row, i;
  24.     float rowskip, toskip;
  25.     register int col, val;
  26.     int rows, cols;
  27.     char* usage = "[-headerskip N] [-rowskip N] <width> <height> [rawfile]";
  28.     double atof();
  29.  
  30.     pgm_init( &argc, argv );
  31.  
  32.     argn = 1;
  33.     headerskip = 0;
  34.     rowskip = 0.0;
  35.  
  36.     while ( argn < argc && argv[argn][0] == '-' && argv[argn][1] != '\0' )
  37.     {
  38.     if ( pm_keymatch( argv[argn], "-headerskip", 2 ) )
  39.         {
  40.         ++argn;
  41.         if ( argn >= argc )
  42.         pm_usage( usage );
  43.         headerskip = atoi( argv[argn] );
  44.         }
  45.     else if ( pm_keymatch( argv[argn], "-rowskip", 2 ) )
  46.         {
  47.         ++argn;
  48.         if ( argn >= argc )
  49.         pm_usage( usage );
  50.         rowskip = atof( argv[argn] );
  51.         }
  52.     else
  53.         pm_usage( usage );
  54.     ++argn;
  55.     }
  56.  
  57.     if ( argn + 2 > argc )
  58.     pm_usage( usage );
  59.  
  60.     cols = atoi( argv[argn++] );
  61.     rows = atoi( argv[argn++] );
  62.     if ( cols <= 0 || rows <= 0 )
  63.     pm_usage( usage );
  64.  
  65.     if ( argn < argc )
  66.     {
  67.     ifp = pm_openr( argv[argn] );
  68.     ++argn;
  69.     }
  70.     else
  71.     ifp = stdin;
  72.  
  73.     if ( argn != argc )
  74.     pm_usage( usage );
  75.  
  76.     pgm_writepgminit( stdout, cols, rows, (gray) 255, 0 );
  77.     grayrow = pgm_allocrow( cols );
  78.     for ( i = 0; i < headerskip; ++i )
  79.     {
  80.     val = getc( ifp );
  81.     if ( val == EOF )
  82.         pm_error( "EOF / read error" );
  83.     }
  84.     toskip = 0.00001;
  85.     for ( row = 0; row < rows; ++row)
  86.     {
  87.     for ( col = 0, gP = grayrow; col < cols; ++col )
  88.         {
  89.         val = getc( ifp );
  90.         if ( val == EOF )
  91.         pm_error( "EOF / read error" );
  92.         *gP++ = val;
  93.         }
  94.     for ( toskip += rowskip; toskip >= 1.0; toskip -= 1.0 )
  95.         {
  96.         val = getc( ifp );
  97.         if ( val == EOF )
  98.         pm_error( "EOF / read error" );
  99.         }
  100.     pgm_writepgmrow( stdout, grayrow, cols, (gray) 255, 0 );
  101.     }
  102.     pm_close( ifp );
  103.     pm_close( stdout );
  104.  
  105.     exit( 0 );
  106.     }
  107.